package com.cencat.common.enums;

/**
 * 授权类型枚举
 * 
 * @author cencat
 * @since 2024-01-01
 */
public enum GrantType {

    /**
     * 授权
     */
    GRANT(1, "授权"),

    /**
     * 拒绝
     */
    DENY(0, "拒绝");

    /**
     * 类型码
     */
    private final Integer code;

    /**
     * 类型描述
     */
    private final String description;

    /**
     * 构造函数
     * 
     * @param code 类型码
     * @param description 类型描述
     */
    GrantType(Integer code, String description) {
        this.code = code;
        this.description = description;
    }

    /**
     * 获取类型码
     * 
     * @return 类型码
     */
    public Integer getCode() {
        return code;
    }

    /**
     * 获取类型描述
     * 
     * @return 类型描述
     */
    public String getDescription() {
        return description;
    }

    /**
     * 根据类型码获取枚举
     * 
     * @param code 类型码
     * @return 枚举值
     */
    public static GrantType getByCode(Integer code) {
        if (code == null) {
            return null;
        }
        for (GrantType type : values()) {
            if (type.getCode().equals(code)) {
                return type;
            }
        }
        return null;
    }

    /**
     * 根据描述获取枚举
     * 
     * @param description 描述
     * @return 枚举值
     */
    public static GrantType getByDescription(String description) {
        if (description == null || description.trim().isEmpty()) {
            return null;
        }
        for (GrantType type : values()) {
            if (type.getDescription().equals(description.trim())) {
                return type;
            }
        }
        return null;
    }

    /**
     * 判断是否为授权类型
     * 
     * @return 是否为授权类型
     */
    public boolean isGrant() {
        return this == GRANT;
    }

    /**
     * 判断是否为拒绝类型
     * 
     * @return 是否为拒绝类型
     */
    public boolean isDeny() {
        return this == DENY;
    }

    @Override
    public String toString() {
        return description;
    }
}